package com.bird.设计模式.创建型.原型模式.深克隆和浅克隆;

import java.util.Date;

/**
 * @data 2022/3/14 9:50
 * @author: bird
 * @description: 模拟深克隆和浅克隆
 */
public class Pig implements Cloneable {
    private String name;
    private Date date;

    public Pig(String name, Date date) {
        System.out.println("constructor param...");
        this.name = name;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

//    @Override // 默认是浅克隆
//    protected Object clone() throws CloneNotSupportedException {
//        System.out.println("这个是默认的克隆方式 浅克隆 clone object;");
//        // 这个是浅克隆
//        return super.clone();
//    }


    @Override // 这个是深克隆
    protected Object clone() throws CloneNotSupportedException {

        // 这个是浅克隆
        /*System.out.println(" clone object;");
        return super.clone();*/

        // 这个是深克隆 如果类的属性是引用对象的的话 那么这个引用对象属性也是需要单独的进行克隆
        Pig pig = (Pig) super.clone();
        pig.date = (Date) pig.date.clone();
        return pig;
    }

    @Override
    public String toString() {
        return "Pig{" +
                "name='" + name + '\'' +
                ", date=" + date +
                '}' + super.toString();
    }
}
